#include <iostream>

#include <stdlib.h>

#include <string>

#include <fstream>

#include "bundle.h"

void Usage(){
    std::cout<<"\nUsage:\n\t";
    std::cout<<"./unbundle [beforefname] [afterfname]\n"<<std::endl;
    exit(-1);
}

int main(int argc, char *argv[]){

    //  std::cout<<"hello world"<<std::endl;
    if(argc < 3) Usage();
    
    std::string ifilename(argv[1]); // 将文件名从命令行参数中获取
    std::string ofilename(argv[2]);
    

    std::ifstream ifs; // 创建文件流
    std::ofstream ofs;

    ifs.open(ifilename,std::ios::binary); // 以二进制的形式打开
   
    std::string body;   // 用于存放未解压的文件内容

    ifs.seekg(0,std::ios::end); // 将文件流位置跳至文件结尾 - 方便获取文件大小
    size_t fsize = ifs.tellg(); // 获取当前文件流位置 (获取文件大小)
    body.resize(fsize);         // 设置 body 为未解压文件大小
    ifs.seekg(0,std::ios::beg); // 将文件流跳至原位
                                
    ifs.read(&body[0],fsize);   // 将未解压的文件读取至 body 字符串中

    std::string unbundle = bundle::unpack(body);

    ofs.open(ofilename,std::ios::binary); // 打开
    ofs.write(&unbundle[0],unbundle.size());

    ifs.close();
    ofs.close();

    return 0;
}
